package com.baidu.sggc.core.common.utils;

import java.util.regex.Pattern;

/**
 * 输入校验工具类。
 * <p>
 * 提供常用字段的格式合法性验证方法，例如普通输入、描述信息、名称等。
 * </p>
 */
public class InputValidatorUtils {

    /**
     * 禁用符号的正则表达式，用于识别不允许出现的字符。
     * 包括：_ ? * ; %
     */
    private static final Pattern INVALID_SYMBOL_PATTERN = Pattern.compile("[_?*;￥$%#]");

    /**
     * 中文、英文、数字、部分常用符号的正则表达式。
     */
    private static final Pattern BASIC_INPUT_PATTERN = Pattern.compile("^[\\u4e00-\\u9fa5a-zA-Z0-9\\s.,，。！？!@\\-+=()【】{}《》“”：；、·]*$");

    /**
     * 名称校验规则：
     * 1. 只能包含中文、英文、数字、下划线；
     * 2. 长度为 2~50 字符；
     * 3. 不允许以下划线或数字开头。
     */
    private static final Pattern NAME_PATTERN = Pattern.compile("^(?![0-9_])[\\u4e00-\\u9fa5a-zA-Z0-9_]{1,50}$");

    /**
     * 校验普通输入是否合法。
     * <p>规则：不能包含非法字符，允许中文、英文、数字及部分常用符号。</p>
     *
     * @param input 用户输入内容
     * @return true 合法，false 不合法
     */
    public static boolean isValidInput(String input) {
        if (input == null) {
            return false;
        }
        if (INVALID_SYMBOL_PATTERN.matcher(input).find()) {
            return false;
        }
        return BASIC_INPUT_PATTERN.matcher(input).matches();
    }

    /**
     * 校验描述输入是否合法。
     * 规则：不能为 null 或全空白，长度不超过 100 字符即可。
     *
     * @param input 描述内容
     * @return true 合法，false 不合法
     */
    public static boolean isValidDescription(String input) {
        if (input == null) {
            return false;
        }
        input = input.trim();
        if (input.isEmpty()) {
            return false;
        }
        return input.length() <= 100;
    }


    /**
     * 校验名称是否合法。
     * 规则：不能为 null 或全空白，中文、英文、数字、下划线，长度2-50，不能以数字或下划线开头。
     *
     * @param name 名称字段
     * @return true 合法，false 不合法
     */
    public static boolean isValidName(String name) {
        if (name == null) {
            return false;
        }
        name = name.trim();
        if (name.isEmpty()) {
            return false;
        }
        return NAME_PATTERN.matcher(name).matches();
    }
}
